package com.bookrecomm.service;

import com.bookrecomm.dto.UserLoginDTO;
import com.bookrecomm.dto.UserRegisterDTO;
import com.bookrecomm.entity.User;
import com.bookrecomm.vo.UserVO;

/**
 * 用户服务接口
 * 定义用户相关的业务逻辑方法
 */
public interface UserService {

    /**
     * 用户注册
     * @param registerDTO 注册信息
     * @return 注册成功的用户信息
     */
    UserVO register(UserRegisterDTO registerDTO);

    /**
     * 用户登录
     * @param loginDTO 登录信息
     * @return 登录成功的用户信息（包含令牌）
     */
    UserVO login(UserLoginDTO loginDTO);

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户信息
     */
    User findByUsername(String username);

    /**
     * 根据ID查询用户
     * @param id 用户ID
     * @return 用户信息
     */
    UserVO findById(Long id);

    /**
     * 更新用户信息
     * @param id 用户ID
     * @param user 用户信息
     * @return 更新后的用户信息
     */
    UserVO updateUser(Long id, User user);

    /**
     * 更新用户密码
     * @param id 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否更新成功
     */
    boolean updatePassword(Long id, String oldPassword, String newPassword);

    /**
     * 获取当前登录用户信息
     * @return 当前用户信息
     */
    UserVO getCurrentUser();

    /**
     * 检查用户名是否已存在
     * @param username 用户名
     * @return 是否存在
     */
    boolean existsByUsername(String username);

    /**
     * 检查邮箱是否已存在
     * @param email 邮箱
     * @return 是否存在
     */
    boolean existsByEmail(String email);

    /**
     * 检查手机号是否已存在
     * @param phone 手机号
     * @return 是否存在
     */
    boolean existsByPhone(String phone);
}
